/**
* @author TDSoft
*
* La clase GestorIdiomas se usa para gestionar los mensajes del aplicativo en
* el idioma por defecto del sistema operativo.
*
*/
package edu.uoc.tds.pec4.i18n;

import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

public class GestorIdiomas {
private static ResourceBundle resourceBundle;
    private static String currentBaseName;
    private static Locale currentLocale;

    /**
     * Configura el idioma por defecto en el gestor de idiomas GestorIdiomas.*
     * De esta manera, siempre se sacar�n los mensajes en el idioma por defecto del sistema operativo.
     * Este viene referenciado por Locale.getDefault()
     *
     * @param  baseName  direcci�n donde se encuentra el fichero de idiomas
     * @throws NullPointerException si baseName es nulo
     * @return un booleano indicando si la operaci�n ha ido bien
     */
    public static synchronized boolean setDefaultLanguage(String baseName) {
        try {
            currentBaseName = baseName;
            resourceBundle = ResourceBundle.getBundle(baseName, Locale.getDefault());

            return true;
        }

        catch (MissingResourceException exc) {
            return false;
        }
    }

    /**
     * Configura el idioma indicado por el usuario en el gestor de idiomas GestorIdiomas
     *
     * @param baseName dirección donde se encuentra el fichero de idiomas
     * @param locale idioma que se quiere indicar
     * @throws NullPointerException si baseName o locale son nulos
     * @return un booleano indicando si la operación ha ido bien
     */
    public static synchronized boolean setLanguage(String baseName, Locale locale) {
        try {
            currentBaseName = baseName;
            currentLocale = locale;
            resourceBundle = ResourceBundle.getBundle(baseName, locale);
            return true;
        } 
        
        catch (MissingResourceException exc) {
            return false;
        }
    }

    /**
     * Obtiene el texto del fichero de idiomas segun la etiqueta solicitada
     *
     * @param clave etiqueta del fichero de idiomas
     * @param locale idioma que se quiere indicar
     * @throws NullPointerException si el gestor de idiomas no ha sido aún configurado
     * @return un String con la traducción solicitada
     */
    public static String getMessage(String clave) {
        try {
            return resourceBundle.getString(clave);
        } 
        
        catch (MissingResourceException exc) {
            return new String();
        }
    }

    /**
     * Informa cual es actualmente el fichero de idiomas configurado
     *
     * @return un String con el nombre del fichero del gestor de idiomas
     */
    public static String getCurrentBaseName() {
        return currentBaseName;
    }

    /**
     * Informa cual es actualmente el idioma configurado
     *
     * @return un Locale con el idioma del gestor de idiomas
     */
    public static Locale getCurrentLocale() {
        return currentLocale;
    }
}
